package com.spring.context;

import com.spring.utils.Assert;

public interface BeanDefinition {
        String SCOPE_SINGLETON = "singleton";
        String SCOPE_PROTOTYPE = "prototype";

        Class<?> getBeanClass();
        String getScope();
        boolean isSingleton();
        boolean isPrototype();
        String getFactoryBeanName();
        String getFactoryMethodName();
        String getInitMethodName();
        String getDestoryMethodName();
    
        //tips:java8开始就可以直接写接口默认方法了
        default boolean validate(){
            //class没指定,工厂bean或工厂method不指定皆为不合法情况
            if (this.getBeanClass()==null){
                if(Assert.isBlank(getFactoryBeanName())||Assert.isBlank(getFactoryMethodName())){
                    return false;
                }
            }
    
            //class和工厂bean同时存在
            if (this.getBeanClass()!=null && Assert.isNotBlank(getFactoryBeanName())){
                return false;
            }
            return true;
        }
    }       
